home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / programming / e / lsestuff / collectionzyx.e < prev    next >
Text File  |  1999-11-29  |  8KB  |  335 lines

  1. OPT MODULE
  2.  
  3. MODULE '*xli'
  4. MODULE '*collectionYX'
  5.  
  6. EXPORT OBJECT collectionZYX OF xli
  7. ENDOBJECT
  8.  
  9. PROC private_Methods_From_Here() OF collectionZYX IS EMPTY
  10.  
  11. PROC collectionZYX() OF collectionZYX IS TRUE
  12.  
  13. PROC clear() OF collectionZYX
  14.    DEF nayx:PTR TO collectionZYX
  15.    DEF next
  16.    nayx := self.first()
  17.    WHILE nayx
  18.       next := nayx.next
  19.       self.remove(nayx)
  20.       END nayx
  21.       nayx := next
  22.    ENDWHILE
  23. ENDPROC
  24.  
  25. PROC scrollX(amount) OF collectionZYX
  26.    DEF nayx:PTR TO collectionYX
  27.    nayx := self.first()
  28.    WHILE nayx
  29.       nayx.scrollX(amount)
  30.       nayx := nayx.next
  31.    ENDWHILE
  32. ENDPROC
  33.  
  34. PROC scrollZ(amount) OF collectionZYX IS self.scroll(amount)
  35.  
  36. PROC scrollY(amount) OF collectionZYX
  37.    DEF nayx:PTR TO collectionYX
  38.    nayx := self.first()
  39.    WHILE nayx
  40.       nayx.scrollY(amount)
  41.       nayx := nayx.next
  42.    ENDWHILE
  43. ENDPROC
  44.  
  45. PROC getCollectionYX(z) OF collectionZYX IS self.find(z)
  46.  
  47. PROC countZYX() OF collectionZYX
  48.    DEF nayx:PTR TO collectionYX
  49.    DEF count=NIL
  50.    nayx := self.first()
  51.    WHILE nayx
  52.       count := count + nayx.countYX()
  53.       INC count
  54.       nayx := nayx.next
  55.    ENDWHILE
  56. ENDPROC
  57.  
  58. PROC countY() OF collectionZYX
  59.    DEF nayx:PTR TO collectionYX
  60.    DEF count=NIL
  61.    nayx := self.first()
  62.    WHILE nayx
  63.       count := count + nayx.countY()
  64.       nayx := nayx.next
  65.    ENDWHILE
  66. ENDPROC count
  67.  
  68. PROC countX() OF collectionZYX
  69.    DEF nayx:PTR TO collectionYX
  70.    DEF count=NIL
  71.    nayx := self.first()
  72.    WHILE nayx
  73.       count := count + nayx.countX()
  74.       nayx := nayx.next
  75.    ENDWHILE
  76. ENDPROC count
  77.  
  78. PROC countYX() OF collectionZYX
  79.    DEF nayx:PTR TO collectionYX
  80.    DEF count=NIL
  81.    nayx := self.first()
  82.    WHILE nayx
  83.       count := count + nayx.countYX()
  84.       nayx := nayx.next
  85.    ENDWHILE
  86. ENDPROC
  87.  
  88. PROC countZ() OF collectionZYX IS self.countNodes()
  89.  
  90. PROC getMaxZ() OF collectionZYX IS self.getMaxID()
  91.  
  92. PROC getMinZ() OF collectionZYX IS self.getMinID()
  93.  
  94. PROC getMaxY() OF collectionZYX
  95.    DEF nayx:PTR TO collectionYX
  96.    DEF maxy=NIL
  97.    nayx := self.first()
  98.    WHILE nayx
  99.       maxy := Max(maxy, nayx.getMaxY())
  100.       nayx := nayx.next
  101.    ENDWHILE
  102. ENDPROC maxy
  103.  
  104. PROC getMinY() OF collectionZYX
  105.    DEF nayx:PTR TO collectionYX
  106.    DEF miny=NIL
  107.    nayx := self.first()
  108.    WHILE nayx
  109.       miny := Min(miny, nayx.getMinY())
  110.       nayx := nayx.next
  111.    ENDWHILE
  112. ENDPROC miny
  113.  
  114. PROC getMaxX() OF collectionZYX
  115.    DEF nayx:PTR TO collectionYX
  116.    DEF maxx=NIL
  117.    nayx := self.first()
  118.    WHILE nayx
  119.       maxx := Max(maxx, nayx.getMaxX())
  120.       nayx := nayx.next
  121.    ENDWHILE
  122. ENDPROC maxx
  123.  
  124. PROC getMinX() OF collectionZYX
  125.    DEF nayx:PTR TO collectionYX
  126.    DEF minx=NIL
  127.    nayx := self.first()
  128.    WHILE nayx
  129.       minx := Min(minx, nayx.getMinX())
  130.       nayx := nayx.next
  131.    ENDWHILE
  132. ENDPROC minx
  133.  
  134.  
  135. PROC set(z, y, x, value) OF collectionZYX
  136.    DEF nayx:PTR TO collectionYX
  137.    nayx := self.ordFind(z)
  138.    IF nayx = NIL
  139.       IF value = NIL THEN RETURN NIL
  140.       NEW nayx.collectionYX()
  141.       nayx.id := y
  142.       self.ordInsert(nayx)
  143.    ENDIF
  144.    nayx.set(y, x, value)
  145. ENDPROC
  146.  
  147. PROC get(z, y, x) OF collectionZYX
  148.    DEF nayx:PTR TO collectionYX
  149.    nayx := self.ordFind(z)
  150.    IF nayx = NIL THEN RETURN NIL
  151. ENDPROC nayx.get(y, x)
  152.  
  153. PROC unSet(z, y, x) OF collectionZYX
  154.    DEF nayx:PTR TO collectionYX
  155.    nayx := self.ordFind(z)
  156.    IF nayx = NIL THEN RETURN NIL
  157.    nayx.unSet(y, x)
  158.    IF nayx.countYX() = NIL
  159.       self.remove(nayx)
  160.       END nayx
  161.    ENDIF
  162. ENDPROC
  163.  
  164. PROC applyNewFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
  165.    DEF nayx1:PTR TO collectionYX
  166.    DEF nayx2:PTR TO collectionYX
  167.    DEF newnayx:PTR TO collectionYX
  168.    nayx1 := self.first()
  169.    nayx2 := nazyx.first()
  170.    WHILE nayx2
  171.       IF nayx1.id = nayx2.id
  172.          nayx1 := nayx1.next
  173.          nayx2 := nayx2.next
  174.       ELSEIF nayx1.id > nayx2.id
  175.          NEW newnayx.collectionYX()
  176.          newnayx.id := nayx2.id
  177.          nayx2.cloneContentsTo(newnayx)
  178.          self.ordInsert(newnayx)
  179.          nayx2 := nayx2.next
  180.       ELSE -> nayx1.id < nayx2
  181.          nayx1 := nayx1.next
  182.       ENDIF
  183.    ENDWHILE
  184. ENDPROC
  185.  
  186. PROC applyAllFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
  187.    DEF nayx1:PTR TO collectionYX
  188.    DEF nayx2:PTR TO collectionYX
  189.    DEF newnayx:PTR TO collectionYX
  190.    nayx1 := self.first()
  191.    nayx2 := nazyx.first()
  192.    WHILE nayx2
  193.       IF nayx1.id = nayx2.id
  194.          nayx2.cloneContentsTo(nayx1)
  195.          nayx1 := nayx1.next
  196.          nayx2 := nayx2.next
  197.       ELSEIF nayx1.id > nayx2.id
  198.          NEW newnayx.collectionYX()
  199.          newnayx.id := nayx2.id
  200.          nayx2.cloneContentsTo(newnayx)
  201.          self.ordInsert(newnayx)
  202.          nayx2 := nayx2.next
  203.       ELSE -> nayx1.id < nayx2
  204.          nayx1 := nayx1.next
  205.       ENDIF
  206.    ENDWHILE
  207. ENDPROC
  208.  
  209. PROC applyORFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
  210.    DEF nayx1:PTR TO collectionYX
  211.    DEF nayx2:PTR TO collectionYX
  212.    DEF newnayx:PTR TO collectionYX
  213.    nayx1 := self.first()
  214.    nayx2 := nazyx.first()
  215.    WHILE nayx2
  216.       IF nayx1.id = nayx2.id
  217.          nayx1 := nayx1.next
  218.          nayx2 := nayx2.next
  219.          nayx1.applyORFrom(nayx2)
  220.       ELSEIF nayx1.id > nayx2.id
  221.          NEW newnayx.collectionYX()
  222.          newnayx.id := nayx2.id
  223.          nayx2.cloneContentsTo(newnayx)
  224.          self.ordInsert(newnayx)
  225.          nayx2 := nayx2.next
  226.       ELSE -> nayx1.id < nayx2
  227.          nayx1 := nayx1.next
  228.       ENDIF
  229.    ENDWHILE
  230. ENDPROC
  231.  
  232. PROC applyExistsFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
  233.    DEF nayx1:PTR TO collectionYX
  234.    DEF nayx2:PTR TO collectionYX
  235.    nayx1 := self.first()
  236.    nayx2 := nazyx.first()
  237.    WHILE nayx2
  238.       IF nayx1.id = nayx2.id
  239.          nayx1 := nayx1.next
  240.          nayx2 := nayx2.next
  241.          nayx1.applyExistsFrom(nayx2)
  242.       ELSEIF nayx1.id > nayx2.id
  243.          nayx2 := nayx2.next
  244.       ELSE -> nayx1.id < nayx2
  245.          nayx1 := nayx1.next
  246.       ENDIF
  247.    ENDWHILE
  248. ENDPROC
  249.  
  250. PROC applyANDFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
  251.    DEF nayx1:PTR TO collectionYX
  252.    DEF nayx2:PTR TO collectionYX
  253.    nayx1 := self.first()
  254.    nayx2 := nazyx.first()
  255.    WHILE nayx2
  256.       IF nayx1.id = nayx2.id
  257.          nayx1 := nayx1.next
  258.          nayx2 := nayx2.next
  259.          nayx1.applyANDFrom(nayx2)
  260.       ELSEIF nayx1.id > nayx2.id
  261.          nayx2 := nayx2.next
  262.       ELSE -> nayx1.id < nayx2
  263.          nayx1 := nayx1.next
  264.       ENDIF
  265.    ENDWHILE
  266. ENDPROC
  267.  
  268. PROC applyAveFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
  269.    DEF nayx1:PTR TO collectionYX
  270.    DEF nayx2:PTR TO collectionYX
  271.    DEF newnayx:PTR TO collectionYX
  272.    nayx1 := self.first()
  273.    nayx2 := nazyx.first()
  274.    WHILE nayx2
  275.       IF nayx1.id = nayx2.id
  276.          nayx1 := nayx1.next
  277.          nayx2 := nayx2.next
  278.          nayx1.applyAveFrom(nayx2)
  279.       ELSEIF nayx1.id > nayx2.id
  280.          NEW newnayx.collectionYX()
  281.          newnayx.id := nayx2.id
  282.          newnayx.applyAveFrom(nayx2)
  283.          self.ordInsert(newnayx)
  284.          nayx2 := nayx2.next
  285.       ELSE -> nayx1.id < nayx2
  286.          nayx1 := nayx1.next
  287.       ENDIF
  288.    ENDWHILE
  289. ENDPROC
  290.  
  291. PROC cloneContentsTo(nazyx:PTR TO collectionZYX) OF collectionZYX
  292.    DEF nayx:PTR TO collectionYX
  293.    DEF newnayx:PTR TO collectionYX
  294.    nazyx.clear()
  295.    nayx := self.first()
  296.    WHILE nayx
  297.       NEW newnayx.collectionYX()
  298.       nayx.cloneContentsTo(newnayx)
  299.       nazyx.addLast(newnayx)
  300.       nayx := nayx.next
  301.    ENDWHILE
  302. ENDPROC self.first()
  303.  
  304. PROC cmpMapZYX(nazyx:PTR TO collectionZYX) OF collectionZYX
  305.    DEF nayx1:PTR TO collectionYX
  306.    DEF nayx2:PTR TO collectionYX
  307.    IF self.cmpMap(nazyx) = FALSE THEN RETURN FALSE
  308.    nayx1 := self.first()
  309.    nayx2 := nazyx.first()
  310.    WHILE nayx1
  311.       IF nayx1.cmpMapYX(nayx2) = FALSE THEN RETURN FALSE
  312.       nayx1 := nayx1.next
  313.       nayx2 := nayx2.next
  314.    ENDWHILE
  315. ENDPROC TRUE
  316.  
  317. PROC cleanUp() OF collectionZYX
  318.    DEF nayx:PTR TO collectionYX
  319.    DEF next:PTR TO collectionYX
  320.    nayx := self.first()
  321.    WHILE nayx
  322.       next := nayx.next
  323.       nayx.cleanUp()
  324.       IF nayx.countX() = NIL
  325.          self.remove(nayx)
  326.          END nayx
  327.       ENDIF
  328.       nayx := next
  329.    ENDWHILE
  330. ENDPROC
  331.  
  332. PROC end() OF collectionZYX IS self.clear()
  333.  
  334.  
  335.